const { DataTypes, Model } = require('sequelize')
const sequelize = require('../config/database')
const Tags = require('./Tags')
class Issue extends Model { }
Issue.init({
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    allowNull: false,
    autoIncrement: true,
    comment: '记录ID'
  },
  question_name: {
    type: DataTypes.STRING,
    allowNull: false,
    comment: '题目名称'
  },
  // 问题所属分类的id 
  question_cid: {
    type: DataTypes.STRING,
    allowNull: false,
    comment: '问题分类ID'
  },
  // 问题来源枚举: 0:未定义 ,1: 面试, 2: 社交媒体, 3:内部推荐, 7: 行业网站或行业论坛(例如:稀土掘金, 知否),8: 招聘平台, 9:校园招聘, 10: 其他, 
  question_from: {
    type: DataTypes.TEXT,
    allowNull: false,
    get () {
      const value = this.getDataValue('question_from');
      return value ? value.split(',') : [];
    },
    set (value) {
      if (Array.isArray(value)) {
        this.setDataValue('question_from', value.join(','));
      } else {
        this.setDataValue('question_from', value);
      }
    },
    validate: {
      notEmpty: true
    },
    comment: '问题来源',
  },
  question_address: {
    type: DataTypes.STRING,
    allowNull: true,
    comment: '题目地址' // 当来自网站 或者招聘平台时填写的地址供参考
  },
  author: {
    type: DataTypes.STRING,
    allowNull: false,
    comment: '题目提供者'
  },
  answer: {
    type: DataTypes.TEXT,
    allowNull: true,
    comment: '题目参考答案'
  },
  stats: {
    comment: '启禁状态',
    type: DataTypes.INTEGER,
    allowNull: false,
    validate: {
      isIn: [[0, 1, 2]] // 限制值为 0: 待启用、1:已启用 2:已禁止
    },
    defaultValue: 0 // 默认值为 0（未删除）
  },
  del: {
    comment: '是否删除',
    type: DataTypes.TINYINT,
    allowNull: false,
    values: [0, 1],
    defaultValue: 0 // 默认值为 0（未删除）
  },
  ctime: {
    comment: "创建时间",
    type: DataTypes.BIGINT,
    allowNull: false,
    defaultValue: () => new Date().getTime()
  },
  rmk: {
    comment: '备注信息',
    type: DataTypes.STRING,
    allowNull: true
  },
}, {
  sequelize,
  modelName: 'Issue'
})
Issue.belongsTo(Tags, { foreignKey: 'question_cid', as: 'tags' });
module.exports = Issue;
